#ifndef __SYMBOLS_H__
#define __SYMBOLS_H__

enum {
    CXX_WORD = 258,

    CXX_KW_and,
    CXX_KW_and_eq,
    CXX_KW_asm,
    CXX_KW_auto,
    CXX_KW_bitand,
    CXX_KW_bitor,
    CXX_KW_bool,
    CXX_KW_break,
    CXX_KW_case,
    CXX_KW_catch,
    CXX_KW_char,
    CXX_KW_class,
    CXX_KW_compl,
    CXX_KW_const,
    CXX_KW_const_cast,
    CXX_KW_continue,
    CXX_KW_default,
    CXX_KW_delete,
    CXX_KW_do,
    CXX_KW_double,
    CXX_KW_dynamic_cast,
    CXX_KW_else,
    CXX_KW_enum,
    CXX_KW_explicit,
    CXX_KW_export,
    CXX_KW_extern,
    CXX_KW_false,
    CXX_KW_float,
    CXX_KW_for,
    CXX_KW_friend,
    CXX_KW_goto,
    CXX_KW_if,
    CXX_KW_inline,
    CXX_KW_int,
    CXX_KW_long,
    CXX_KW_mutable,
    CXX_KW_namespace,
    CXX_KW_new,
    CXX_KW_not,
    CXX_KW_not_eq,
    CXX_KW_operator,
    CXX_KW_or,
    CXX_KW_or_eq,
    CXX_KW_private,
    CXX_KW_protected,
    CXX_KW_public,
    CXX_KW_register,
    CXX_KW_reinterpret_cast,
    CXX_KW_return,
    CXX_KW_short,
    CXX_KW_signed,
    CXX_KW_sizeof,
    CXX_KW_static,
    CXX_KW_static_cast,
    CXX_KW_struct,
    CXX_KW_switch,
    CXX_KW_template,
    CXX_KW_this,
    CXX_KW_throw,
    CXX_KW_true,
    CXX_KW_try,
    CXX_KW_typedef,
    CXX_KW_typeid,
    CXX_KW_typename,
    CXX_KW_union,
    CXX_KW_unsigned,
    CXX_KW_using,
    CXX_KW_virtual,
    CXX_KW_void,
    CXX_KW_volatile,
    CXX_KW_wchar_t,
    CXX_KW_while,
    CXX_KW_xor,
    CXX_KW_xor_eq,

    /* C++11 */
    CXX_KW_alignas,
    CXX_KW_alignof,
    CXX_KW_char16_t,
    CXX_KW_char32_t,
    CXX_KW_constexpr,
    CXX_KW_decltype,
    CXX_KW_noexcept,
    CXX_KW_nullptr,
    CXX_KW_static_assert,
    CXX_KW_thread_local,
    CXX_KW_override,
    CXX_KW_final,

    CXX_OP_LParen,
    CXX_OP_RParen,
    CXX_OP_Comma,
    CXX_OP_LBrace,
    CXX_OP_RBrace,
    CXX_OP_LBracket,
    CXX_OP_RBracket,
    CXX_OP_Dot,
    CXX_OP_And,
    CXX_OP_Mul,
    CXX_OP_Plus,
    CXX_OP_Minus,
    CXX_OP_BitNot,
    CXX_OP_Not,
    CXX_OP_Div,
    CXX_OP_Mod,
    CXX_OP_LT,
    CXX_OP_GT,
    CXX_OP_XOR,
    CXX_OP_Or,
    CXX_OP_Question,
    CXX_OP_Colon,
    CXX_OP_Semicolon,
    CXX_OP_Equal,

    CXX_OP_DotStar,
    CXX_OP_ColonColon,
    CXX_OP_Arrow,
    CXX_OP_ArrowStar,
    CXX_OP_Incr,
    CXX_OP_Decr,
    CXX_OP_LShift,
    CXX_OP_RShift,
    CXX_OP_LE,
    CXX_OP_GE,
    CXX_OP_EQ,
    CXX_OP_NE,
    CXX_OP_AndAnd,
    CXX_OP_OrOr,
    CXX_OP_MulEqual,
    CXX_OP_DivEqual,
    CXX_OP_ModEqual,
    CXX_OP_PlusEqual,
    CXX_OP_MinusEqual,
    CXX_OP_LShiftEqual,
    CXX_OP_RShiftEqual,
    CXX_OP_AndEqual,
    CXX_OP_XOREqual,
    CXX_OP_OrEqual,
    CXX_OP_Ellipsis,

    CXX_INTEGER,    /* 包括所有整数形式，包括各种进制和长度 */
    CXX_CHAR,
    CXX_STRING,
    CXX_BLANK,  /* 单个空格或 Tab */
    CXX_BLANKS, /* 多个空格或 Tab */
    CXX_INVALID,    /* 无效输入 */
};

#endif /* __SYMBOLS_H__ */
